package com.xidian.zhiancloud.controller.dangerWorkTicket;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xidian.zhiancloud.controller.base.BaseController;
import com.xidian.zhiancloud.dto.ResultDTO;
import com.xidian.zhiancloud.enums.GeneralResponseEnums;
import com.xidian.zhiancloud.model.Template;
import com.xidian.zhiancloud.model.dangerWorkTicket.WorkTicketTemplate;
import com.xidian.zhiancloud.qo.dangerWorkTicket.TemplateQO;
import com.xidian.zhiancloud.service.dangerWorkTicket.TemplateService;
import com.xidian.zhiancloud.service.dangerWorkTicket.WorkTicket.WorkTicketTemplateService;
import com.xidian.zhiancloud.vo.dangerWorkTicket.TemplateVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.sql.Date;
import java.util.Arrays;
import java.util.List;

/**
 *   作业票 - 作业管理
 *   是“作业票模板”与“危险作业申请”两个页面的结合
 */
@RestController
@RequestMapping("/Template")
public class TemplateController extends BaseController {
    @Autowired
    private TemplateService templateService;

    @Autowired
    private WorkTicketTemplateService workTicketTemplateService;


    /**
     * 增加作业票
     *
     * @param template 待创建的作业票类型
     * @return 是否添加成功
     */
    @PostMapping("/add")
    public ResultDTO<Boolean> add(Template template){
        template.setCreatorId(getSessionUserid());
        template.setCompanyId(getSessionUserCompanyId());
        template.setCreateTime(new Date(System.currentTimeMillis()));
        templateService.add(template);
//        templateService.save(template);
        return ResultDTO.successOf(GeneralResponseEnums.SUCCESS);
    }

    /**
     * 根据id获取获取作业票
     *
     * @param id 作业票的id
     * @return 查找到的作业票
     */
    @GetMapping("/getById")
    public ResultDTO<TemplateVO> getById(@RequestParam("id") Long id) {
        return ResultDTO.successOf(templateService.getVOById(id), GeneralResponseEnums.SUCCESS);
    }

    /**
     * 根据id删除相应的作业票
     *
     * @param ids 作业票的id列表
     * @return 是否删除成功
     */
    @PostMapping("/deleteByIds")
    public ResultDTO<Template> deleteByIds(Long[] ids) {
        templateService.removeByIds(Arrays.asList(ids));
        return ResultDTO.successOf(GeneralResponseEnums.SUCCESS);
    }

    /**
     *  根据id修改相关作业票中的对象
     *
     *  @param  template 作业票对象
     *  @return 是否修改成功
     */
    @PostMapping("/patchById")
    public ResultDTO<Boolean> patchById(Template template){
        template.setCompanyId(null);
        template.setCreatorId(null);
        template.setCreateTime(null);
        templateService.updateById(template);
        return ResultDTO.successOf(GeneralResponseEnums.SUCCESS);
    }

    /**
     * 根据条件查询作业票
     *
     * @param templateQO 查询参数
     * @return 作业票列表
     */
    @GetMapping("/getListByQO")
    public ResultDTO<IPage<TemplateVO>> getListByQueryObject(TemplateQO templateQO){
        if(templateQO.getCurrent() == null || templateQO.getSize() == null){
            return ResultDTO.errorOf(GeneralResponseEnums.REQUEST_ERROR);
        }
        templateQO.setCompanyId(getSessionUserCompanyId());
        return ResultDTO.successOf(templateService.getListByQO(templateQO), GeneralResponseEnums.SUCCESS);
    }


    /**
     * 测试添加模板源content字段。
     */
    @PostMapping("/initFire")
    public ResultDTO<Boolean> initFire() {
        Boolean res = templateService.initFire();
        return ResultDTO.successOf(res, GeneralResponseEnums.SUCCESS);
    }

    /**
     * 新公司初始化作业票模板
     */
    @PostMapping("/initCompany")
    public ResultDTO<Boolean> initCompany(){
        Long companyId = getSessionUserCompanyId();
        Boolean res = templateService.initCompany(companyId);
        return ResultDTO.successOf(true, GeneralResponseEnums.SUCCESS);
    }


    /**
     * 新增作业票 —— 根据作业票模板id作业票Risk
     */
    @GetMapping("/returnFireRisk")
    public ResultDTO<List<String>> returnRisk(@RequestParam("templateId") Long templateId) {
        int isOpen = workTicketTemplateService.getById(templateId).getStatus();
        if (isOpen == 0) {
            System.out.println("该模板已停用");
            return null;
        }
        WorkTicketTemplate workTicketTemplate = workTicketTemplateService.getById(templateId);
        List<String> risks = templateService.returnRiskList(workTicketTemplate);
        return ResultDTO.successOf(risks, GeneralResponseEnums.SUCCESS);
    }




}
